﻿Type.registerNamespace("MoniMisi2");

MoniMisi2.Combo = function(element) {
    MoniMisi2.Combo.initializeBase(this, [element]);
    this.value = null;
    this.DelEncontrado = ""
    this.DelFin = ""
    this.PoblandoArgs = function(pValor) { this.Valor = pValor; this.Cancelar = false };
    this.Defecto = null;
    this.Texto = null;
    this.CssError = null;
    this.CssCorrecto = null;
    this.IdDatos = null;
    this.Tabla = null;
    this.AceptaBlanco = true;
    this.Lleno = null;
    this.Valor = null;
    this.Descripcion = null;
    this.AutoOnChange = null;
    this.Funciones = new MoniMisi2.Funciones();
    this.DelValida = null;
    this.DelBlur = Function.createDelegate(this, this.Validar);

};

MoniMisi2.Combo.prototype = {

    initialize: function() {
        MoniMisi2.Combo.callBaseMethod(this, 'initialize');
        this.Texto = this._element
        if (this.Lleno) {
            this.Refrescar();
        }
        $addHandler(this.Texto, 'blur', this.DelBlur);
        this.DelValida = Function.createDelegate(this, this.ValidaRangos);
        this.add_Validando(this.DelValida)
        this.Funciones.InitValidarControl(this);
        //this.Validar();
    },
    dispose: function() {
        MoniMisi2.Combo.callBaseMethod(this, 'dispose');
    },
    Refrescar: function(pRecargando, pFiltro) {
        if (document.getElementById(this.IdDatos) != null) {
            if (!document.getElementById(this.IdDatos).control.Esperando) {
                while (this.Texto.options.length > 0) { this.Texto.options.remove(0) };
                this.Tabla = document.getElementById(this.IdDatos).control;
                this.DelEncontrado = Function.createDelegate(this, this.Poblar);
                this.DelFin = Function.createDelegate(this, this.Fin);
                if (pRecargando != undefined) {
                    if (pFiltro != undefined) {
                        this.Tabla.Filtro = pFiltro
                    };
                    this.Tabla.Limpiar();
                }
                this.Tabla.add_Encontrado(this.DelEncontrado)
                this.Tabla.add_Fin(this.DelFin)
                this.Tabla.Arribar();
            }
        };
    },
    Fin: function() {
        this.Tabla.remove_Encontrado(this.DelEncontrado);
        this.Tabla.remove_Fin(this.DelFin);
    },
    Poblar: function() {
        this.Tabla.remove_Encontrado(this.DelEncontrado);
        this.Tabla.remove_Fin(this.DelFin);
        if (this.Tabla.Registro != null) {
            this.DelEncontrado = Function.createDelegate(this, this.EncontradoPoblar);
            this.DelFin = Function.createDelegate(this, this.FinPoblar);
            this.Tabla.add_Encontrado(this.DelEncontrado);
            this.Tabla.add_Fin(this.DelFin);
            this.EncontradoPoblar(this, this.Tabla.Registro);
            var Puntero = this.Tabla.Puntero
            while (!this.Tabla.FinDeArchivo) {
                this.Tabla.Avanzar()
            }
            this.Tabla.IrA(Puntero)
            this.Tabla.remove_Encontrado(this.DelEncontrado);
            this.Tabla.remove_Fin(this.DelFin);

        } else {
            this.FinPoblar(this, null);
        }
    },

    EncontradoPoblar: function(sender, e) {
        var ep = new this.PoblandoArgs(e);
        var h = this.get_events().getHandler('Poblando');
        if (h) { h(this, ep) }
        if (!ep.Cancelar) {
            var Opcion = document.createElement("option");

            var datDesc = e
            var props = this.Descripcion.split(".")
            var c = 0
            while (c < props.length) {
                if (props[c] != null) {
                    datDesc = datDesc[props[c]]
                }
                c++
            }

            var datValor = e
            props = this.Valor.split(".")
            c = 0
            while (c < props.length) {
                if (props[c] != null) {
                    datValor = datValor[props[c]]
                }
                c++
            }

            //Opcion.innerHTML = e[this.Descripcion]
            //Opcion.value = e[this.Valor]
            Opcion.innerHTML = datDesc;
            Opcion.value = datValor;
            Opcion.Registro = e
            this.Texto.appendChild(Opcion);
        }
    },

    FinPoblar: function(sender, e) {
        if (this.AutoOnChange) {
            if (document.createEvent) {
                var evObj = document.createEvent('HTMLEvents');
                evObj.initEvent('change', true, false);
                this.Texto.dispatchEvent(evObj);
            } else {
                if (document.createEventObject) {
                    var changeEvent = document.createEventObject(window.event);
                    this.Texto.fireEvent("onchange", changeEvent);
                }
            }
        }
    },

    Validar: function() {
        this.value = null;
        if (this.Texto.options.length > 0) {
            if (this.Texto.selectedIndex >= 0) {
                this.value = this.Texto.options[this.Texto.selectedIndex].value
            }
        }
        this.Funciones.ValidarControl(this, this.value);
    },

    ValidaRangos: function(sender, e) {
        if (!sender.AceptaBlanco) {
            if (e.Valor == null || e.Valor == "") {
                e.Mensajes.push("no puede ser vacío");
                e.Erroneo = true;
            }
        }
    },

    get_Valor: function() {
        return this.Valor;

    },

    set_Valor: function(value) {
        if (this.Valor !== value) {
            this.Valor = value
            this.raisePropertyChanged('Valor');
        }
    },

    get_CssError: function() {
        return this.CssError;
    },

    set_CssError: function(value) {
        if (this.CssError !== value) {
            this.CssError = value;
            this.raisePropertyChanged('CssError');
        }
    },
    get_Defecto: function() {
        return this.Defecto;
    },

    set_Defecto: function(value) {
        if (this.Defecto !== value) {
            this.Defecto = value;
            this.raisePropertyChanged('Defecto');
        }
    },

    get_IdDatos: function() {
        return this.IdDatos;
    },

    set_IdDatos: function(value) {
        if (this.IdDatos !== value) {
            this.IdDatos = value;
            this.raisePropertyChanged('IdDatos');
        }
    },
    get_Descripcion: function() {
        return this.Descripcion;
    },

    set_Descripcion: function(value) {
        if (this.Descripcion !== value) {
            this.Descripcion = value;
            this.raisePropertyChanged('Descripcion');
        }
    },
    get_Lleno: function() {
        return this.Lleno;
    },

    set_Lleno: function(value) {
        if (this.Lleno !== value) {
            this.Lleno = value;
            this.raisePropertyChanged('Lleno');
        }
    },
    get_AutoOnChange: function() {
        return this.AutoOnChange;
    },

    set_AutoOnChange: function(value) {
        if (this.AutoOnChange !== value) {
            this.AutoOnChange = value;
            this.raisePropertyChanged('AutoOnChange');
        }
    },
    get_value: function() {
        if (this.Texto.options[this.Texto.selectedIndex] != undefined) {
            return this.Texto.options[this.Texto.selectedIndex].value;
        } else {
            return null;
        }
    },

    set_value: function(value) {
        if (this.Texto.value !== value) {
            var seleccionado = false;
            for (var x = 0; x < this.Texto.options.length; x += 1) {
                if (this.Texto.options[x].value == value) {
                    this.Texto.options[x].selected = true
                    seleccionado = true;
                } else {
                    this.Texto.options[x].selected = false;
                }
            }
            if (!seleccionado) { this.Texto.selectedIndex = -1; };
            this.Validar()
            this.raisePropertyChanged('value');
        }
    },

    get_AceptaBlanco: function() {
        return this.AceptaBlanco;
    },

    set_AceptaBlanco: function(value) {
        if (this.AceptaBlanco !== value) {
            this.AceptaBlanco = (value == "True" ? true : false);
            this.raisePropertyChanged('AceptaBlanco');
        }
    },

    add_Poblando: function(handler) {
        this.get_events().addHandler('Poblando', handler);
    },
    remove_Poblando: function(handler) {
        this.get_events().removeHandler('Poblando', handler);
    },
    add_Validando: function(handler) {
        this.get_events().addHandler('Validando', handler);
    },
    remove_Validando: function(handler) {
        this.get_events().removeHandler('Validando', handler);
    }
}

MoniMisi2.Combo.registerClass('MoniMisi2.Combo', Sys.UI.Control);

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();